﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
using namespace std;


//初始化列表

//class Time
//{
//public:
//	Time(int time)
//		:_time(time)
//	{}
//private:
//	int _time;
//};
//
//class Date
//{
//public:
//	Date(int& xx, int year, int month, int day)
//		:_year(year),    // 初始化列表
//		_month(month),
//		_day(day),
//		_x(xx),     // 引用成员变量初始化
//		_y(1),      // const成员变量初始化
//		_times(5)   // 没有默认构造的类类型成员变量初始化
//	{}
//private:
//	int _year;
//	int _month;
//	int _day;
//
//	int& _x;      // 引用成员变量
//	const int _y; // const成员变量
//	Time _times;  // 没有默认构造的类类型成员变量
//};
//
//
//int main()
//{
//	int x = 0;
//	Time t(5);
//
//	Date d(x, 2025, 8, 20);
//
//	return 0;
//}


//class Date
//{
//public:
//	Date(int year, int month, int day)
//		:_year(year),    // 初始化列表
//		_month(month)
//	{}
//	void Print()
//	{
//		cout << _year << "年" << _month << "月" << _day << "日" << endl;
//	}
//private:
//	int _year = 2000;
//	int _month = 1;
//	int _day = 1;
//};
//int main()
//{
//	Date d(2025, 8, 20);
//	d.Print();
//	return 0;
//}


//#include<iostream>
//using namespace std;
//class A {
//public:
//	A(int a)
//		:_a1(a)
//		, _a2(_a1)
//    {}
//    void Print() {
//        cout << _a1 << " " << _a2 << endl;
//    }
//private:
//    int _a2 = 2;
//    int _a1 = 2;
//};
//int main()
//{
//    A aa(1);
//    aa.Print();
//}


//static 成员

//class A
//{
//public:
//	A()
//	{
//		_scount++;
//	}
//
//	~A()
//	{
//		--_scount;
//	}
//
//	//_scount被private限制，所以通过Get函数访问_scount
//	static int Get()
//	{
//		return _scount;
//	}
//private:
//	//类里面声明
//	static int _scount;
//};
//
////类外面初始化
//int A::_scount = 1;
//
//int main()
//{
//	A a1;
//	cout << A::Get() << endl; // 类名::成员函数
//	cout << a1.Get() << endl;  // 对象.成员函数
//	return 0;
//}


//class A
//{
//public:
//	A()
//	{
//		_scount++;
//	}
//
//	static int Get()
//	{
//		//_x++;  // 错误示范
//		return _scount;
//	}
//private:
//	int _x;
//	//类里面声明
//	static int _scount;
//};
//
////类外面初始化
//int A::_scount = 1;
//
//int main()
//{
//	cout << sizeof(A) << endl;
//	return 0;
//}



//class A
//{
//public:
//	//构造函数
//	A()
//	{
//		_scount++;
//	}
//	//析构函数
//	~A()
//	{
//		--_scount;
//	}
//
//	//_scount被private限制，所以通过Get函数访问_scount
//	static int Get()
//	{
//		return _scount;
//	}
//private:
//	//类里面声明
//	static int _scount;
//};
//
////类外面初始化
//int A::_scount = 1;
//
//int main()
//{
//	A a1;
//	cout << a1.Get() << endl;
//	//函数局部域
//	{
//		A a2;
//		cout << a2.Get() << endl;
//	}
//
//	cout << a1.Get() << endl;
//	return 0;
//}




//友元

//class Date
//{
//	friend ostream& operator<<(ostream& out, const Date& d);
//public:
//	//...
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//ostream& operator<<(ostream& out, const Date& d)
//{
//	out << d._year << "年" << d._month << "月" << d._day << "日" << endl;
//}


//class A
//{
//	// 友元类声明
//		friend class B;
//private:
//	int _a1 = 1;
//	int _a2 = 2;
//};
//
//class B
//{
//public:
//	void func1(const A& aa)
//	{
//		cout << aa._a1 << endl;
//		cout << _b1 << endl;
//	}
//	void func2(const A& aa)
//	{
//		cout << aa._a2 << endl;
//		cout << _b2 << endl;
//	}
//private:
//	int _b1 = 3;
//	int _b2 = 4;
//};




//内部类

//class A
//{
//public:
//	//内部类
//	class B
//	{
//	public:
//		//...
//	private:
//		int _b1;
//	};
//private:
//	int _a1;
//};
//
//int main()
//{
//	A a;
//	cout << sizeof(a) << endl;
//	return 0;
//}



//class A
//{
//public:
//	class B  // 内部类
//	{
//	public:
//		void func1(const A& aa)
//		{
//			cout << aa._a1 << endl;
//			cout << _b1 << endl;
//		}
//		void func2(const A& aa)
//		{
//			cout << aa._a2 << endl;
//			cout << _b2 << endl;
//		}
//	private:
//		int _b1 = 3;
//		int _b2 = 4;
//	};
//private:
//	int _a1 = 1;
//	int _a2 = 2;
//};
//
//
//int main()
//{
//	A a;
//	A::B b;
//
//	b.func1(a);
//	b.func2(a);
//}



//匿名对象

//class A
//{
//public:
//	~A()
//	{
//		_a--;
//	}
//private:
//	int _a;
//};
//
//int main()
//{
//	A a1;// 定义有名对象
//
//    A(); // 定义匿名对象，匿名对象的特点不⽤取名字，
//	     // 但是他的生命周期只有这一行，我们可以看到下一行他就会自动调用析构函数   
//	return 0;
//}


